#!/bin/bash

# 网络调试助手 deb包构建脚本（二进制版本）

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 参数解析
REBUILD_BINARY=true
if [ "$1" = "--skip-binary" ]; then
    REBUILD_BINARY=false
fi

echo -e "${BLUE}🚀 开始构建网络调试助手 deb包（二进制版本）${NC}"

# 检查依赖
if ! command -v dpkg-deb &> /dev/null; then
    echo -e "${RED}❌ dpkg-deb 未安装，请先安装：sudo apt-get install dpkg-dev${NC}"
    exit 1
fi

if $REBUILD_BINARY && ! command -v pyinstaller &> /dev/null; then
    echo -e "${YELLOW}📦 安装PyInstaller${NC}"
    pip3 install pyinstaller
fi

# 项目目录
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGING_DIR="$PROJECT_DIR/packaging"
BUILD_DIR="$PROJECT_DIR/build"
BACKEND_DIR="$PROJECT_DIR/backend"
FRONTEND_DIR="$PROJECT_DIR/front"
DIST_DIR="$PROJECT_DIR/dist"

# 清理之前的构建（仅清理BUILD_DIR，保留DIST_DIR）
echo -e "${YELLOW}📁 项目目录: $PROJECT_DIR${NC}"
if [ -d "$BUILD_DIR" ]; then
    echo -e "${YELLOW}🧹 清理之前的构建文件${NC}"
    rm -rf "$BUILD_DIR"
fi

# 如果需要重新构建二进制
if $REBUILD_BINARY; then
    # 安装构建依赖
    echo -e "${YELLOW}📦 安装构建依赖${NC}"
    cd "$BACKEND_DIR"
    pip3 install -r requirements.txt

    # 重新构建前端
    echo -e "${YELLOW}🏗️  构建前端项目${NC}"
    cd "$FRONTEND_DIR"
    
    # 检查Node.js版本并使用正确的版本
    NODE_VERSION=$(node --version)
    echo -e "${YELLOW}当前Node.js版本: $NODE_VERSION${NC}"
    
    # 如果Node.js版本过旧，尝试使用nvm安装的高版本Node.js
    if [[ $NODE_VERSION != v2[0-9]* && $NODE_VERSION != v[3-9][0-9]* ]]; then
        if [ -x "$HOME/.nvm/versions/node/v22.20.0/bin/node" ]; then
            echo -e "${YELLOW}使用NVM安装的Node.js v22.20.0${NC}"
            "$HOME/.nvm/versions/node/v22.20.0/bin/npm" run build
        else
            echo -e "${RED}❌ Node.js版本过低，Vite需要Node.js v20.19+或v22.12+${NC}"
            echo -e "${RED}请升级Node.js或确保PATH中包含兼容版本${NC}"
            exit 1
        fi
    else
        npm run build
    fi

    # 检查构建结果
    if [ ! -d "$BACKEND_DIR/static" ]; then
        echo -e "${RED}❌ 前端构建失败，静态文件目录不存在${NC}"
        exit 1
    fi

    echo -e "${GREEN}✅ 前端构建完成${NC}"

    # 构建二进制文件
    echo -e "${YELLOW}🔨 构建Python二进制文件${NC}"
    cd "$BACKEND_DIR"

    # 使用PyInstaller构建
    pyinstaller net-tools.spec --clean

    # 检查构建结果
    if [ ! -d "$BACKEND_DIR/dist/net-tools" ]; then
        echo -e "${RED}❌ 二进制构建失败${NC}"
        exit 1
    fi

    # 移动二进制文件到项目根目录
    if [ -d "$DIST_DIR" ]; then
        rm -rf "$DIST_DIR"
    fi
    mkdir -p "$DIST_DIR"
    mv "$BACKEND_DIR/dist/net-tools" "$DIST_DIR"

    echo -e "${GREEN}✅ 二进制构建完成${NC}"
else
    echo -e "${YELLOW}⏭️  跳过二进制构建（已通过build-binary.sh构建）${NC}"
    # 检查二进制文件是否存在
    if [ ! -f "$DIST_DIR/net-tools" ]; then
        echo -e "${RED}❌ 二进制文件不存在，请先运行build-binary.sh${NC}"
        exit 1
    fi
fi

# 创建构建目录
mkdir -p "$BUILD_DIR"

# 复制打包文件
echo -e "${YELLOW}📦 准备打包文件${NC}"
cp -r "$PACKAGING_DIR" "$BUILD_DIR/net-tools"

# 更新后端文件（使用二进制文件）
echo -e "${YELLOW}📄 更新二进制文件${NC}"
rm -rf "$BUILD_DIR/net-tools/opt/net-tools"
mkdir -p "$BUILD_DIR/net-tools/opt/net-tools"

# 复制二进制文件和静态资源
cp -r "$DIST_DIR"/* "$BUILD_DIR/net-tools/opt/net-tools/"

# 复制配置文件模板
cp "$BACKEND_DIR/config.py" "$BUILD_DIR/net-tools/opt/net-tools/"
echo '{"port": 10001, "host": "0.0.0.0"}' > "$BUILD_DIR/net-tools/opt/net-tools/default_config.json"

# 确保权限正确
echo -e "${YELLOW}🔐 设置文件权限${NC}"
chmod +x "$BUILD_DIR/net-tools/DEBIAN/postinst"
chmod +x "$BUILD_DIR/net-tools/DEBIAN/prerm"
chmod +x "$BUILD_DIR/net-tools/DEBIAN/postrm"
chmod +x "$BUILD_DIR/net-tools/usr/bin/net-tools"
chmod +x "$BUILD_DIR/net-tools/opt/net-tools/net-tools"

# 构建deb包
echo -e "${YELLOW}📦 构建deb包${NC}"
cd "$BUILD_DIR"
dpkg-deb --build net-tools

# 检查包
echo -e "${YELLOW}🔍 检查deb包${NC}"
if [ -f "$BUILD_DIR/net-tools.deb" ]; then
    echo -e "${GREEN}✅ deb包构建成功！${NC}"
    echo -e "${BLUE}📄 包信息:${NC}"
    dpkg-deb --info "$BUILD_DIR/net-tools.deb"
    echo ""
    echo -e "${BLUE}📁 包内容:${NC}"
    dpkg-deb --contents "$BUILD_DIR/net-tools.deb"
    echo ""
    echo -e "${GREEN}🎉 构建完成！${NC}"
    echo -e "${BLUE}安装命令: sudo dpkg -i $BUILD_DIR/net-tools.deb${NC}"
    echo -e "${BLUE}卸载命令: sudo dpkg -r net-tools${NC}"
else
    echo -e "${RED}❌ deb包构建失败${NC}"
    exit 1
fi